#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>

int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    //子进程
    int cnt = 5;
    while(cnt--)
    {
      printf("我是子进程: pid: %d\n", getpid());
      sleep(1);
    }
    exit(10); //终止子进程
  }
  else if(id > 0)
  {
    //父进程
    sleep(10);
    //pid_t rid = wait(NULL);
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid == id)
    {
      int exit_code = (status >> 8)&0xFF;
      int exit_sig = status & 0x7F; 
      printf("pid: %d, wait success!, status: %d, exit_code: %d, exit_sig: %d\n", getpid(), status, exit_code, exit_sig);
    }
    sleep(5);
    exit(0);
  }
}



//void Print()
//{
//  printf("hello world\n");
//  _exit(123);
//}
//
//int main()
//{
//  printf("我是一个进程：pid:%d, ppid:%d\n", getpid(), getppid());
//  Print();
//  exit(12138);
//
//
//
//  //errno = 0, errno =!0
// // FILE *fp = fopen("./log", "r");//失败
// // if(fp == NULL)
// // {
// //   return errno;
// //   //printf("%d: %s\n", errno, strerror(errno));
// // }
// // return 0;
//
//
////  int i = 0;
////  for(i = 0; i < 200; i++)
////  {
////    printf("%d->%s\n", i, strerror(i));
////  }
////  return 0;
//}
